home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Carnage_Contest / scripts / CC Original / weapons / Hitler.lua < prev    next >
Text File  |  2010-09-22  |  7KB  |  200 lines

  1. --------------------------------------------------------------------------------
  2. -- Weapon Hitler + Projectile Hitler
  3. -- Original Carnage Contest Weapon
  4. -- Script by DC, March 2010, www.UnrealSoftware.de
  5. --------------------------------------------------------------------------------
  6.  
  7. -- Setup Tables
  8. if cc==nil then cc={} end
  9. cc.hitler={}
  10. cc.hitler.hitler={}
  11.  
  12. -- Load & Prepare Ressources
  13. cc.hitler.gfx_wpn0=loadgfx("weapons/hitler0.bmp")                -- Weapon Image Frame 0
  14. setmidhandle(cc.hitler.gfx_wpn0)
  15. cc.hitler.gfx_wpn1=loadgfx("weapons/hitler1.bmp")                -- Weapon Image Frame 1
  16. setmidhandle(cc.hitler.gfx_wpn1)
  17. cc.hitler.sfx_attack=loadsfx("hitler.ogg")                        -- Attack Sound
  18.  
  19. --------------------------------------------------------------------------------
  20. -- Weapon: Hitler
  21. --------------------------------------------------------------------------------
  22.  
  23. cc.hitler.id=addweapon("cc.hitler","Hitler",cc.hitler.gfx_wpn0,0,2)        -- Add Weapon (0 uses, first in round 2)
  24.  
  25. function cc.hitler.draw()                                                -- Draw
  26.     -- Draw
  27.     if weapon_shots<=0 then
  28.         -- Info
  29.         hudinfo("Hit [Space] once to launch Hitler!")
  30.         if getplayeraction(0)==0 then
  31.             setblend(blend_alpha)
  32.             setalpha(1)
  33.             setcolor(255,255,255)
  34.             setscale(getplayerdirection(0),1)
  35.             setrotation(-(20+math.sin(os.clock()*15)*5)*getplayerdirection(0))
  36.             drawimage(cc.hitler.gfx_wpn0,getplayerx(0)+getplayerdirection(0)*7,getplayery(0)-5)
  37.         end
  38.     end
  39. end
  40.  
  41. function cc.hitler.attack(attack)                                    -- Attack
  42.     if (weapon_shots<=0) then
  43.         -- Fire a projectile (on release/full charge)
  44.         if (attack==1) then
  45.             -- No more weapon switching!
  46.             useweapon(0)
  47.             -- No more player control!
  48.             playercontrol(0)
  49.             -- Set Round Time (15 sec)
  50.             secondsleft=math.floor(getframesleft()/50)
  51.             changeturntime(15-secondsleft)
  52.             -- Launch
  53.             weapon_shots=weapon_shots+1
  54.             id=createprojectile(cc.hitler.hitler.id)
  55.             projectiles[id]={}
  56.             -- Ignore collision with current player at beginning
  57.             projectiles[id].ignore=playercurrent()
  58.             -- Set initial position of projectile
  59.             projectiles[id].x=getplayerx(0)+getplayerdirection(0)*8
  60.             projectiles[id].y=getplayery(0)-3
  61.             if collision(colplayer,projectiles[id].x,projectiles[id].y)==1 then
  62.                 if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  63.                     projectiles[id].x=getplayerx(0)
  64.                 end
  65.             end
  66.             -- Set Speeds
  67.             projectiles[id].sy=0
  68.             -- Set direction of projectile
  69.             projectiles[id].dir=getplayerdirection(0)
  70.             -- Animation
  71.             projectiles[id].frame=0
  72.             projectiles[id].timer=0
  73.             -- Timer
  74.             weapon_timer=50
  75.         end
  76.     end
  77. end
  78.  
  79. --------------------------------------------------------------------------------
  80. -- Projectile: Hitler
  81. --------------------------------------------------------------------------------
  82.  
  83. cc.hitler.hitler.id=addprojectile("cc.hitler.hitler")        -- Add Projectile
  84.  
  85. function cc.hitler.hitler.draw(id)                                -- Draw
  86.     -- Setup draw mode
  87.     setblend(blend_alpha)
  88.     setalpha(1)
  89.     setcolor(255,255,255)
  90.     setscale(projectiles[id].dir,1)
  91.     -- Draw projectile
  92.     if projectiles[id].frame==0 then
  93.         drawimage(cc.hitler.gfx_wpn0,projectiles[id].x,projectiles[id].y-2)
  94.     else
  95.         drawimage(cc.hitler.gfx_wpn1,projectiles[id].x,projectiles[id].y-2)
  96.     end
  97.     -- Draw Arrow if out of Screen
  98.     outofscreenarrow(projectiles[id].x,projectiles[id].y)
  99.     -- Info
  100.     hudinfo("Hit [Space] again to detonate Hitler!")
  101. end
  102.  
  103. function cc.hitler.hitler.update(id)                            -- Update
  104.     -- Timer
  105.     weapon_timer=weapon_timer-1
  106.     -- Animation
  107.     projectiles[id].timer=projectiles[id].timer+1
  108.     if projectiles[id].timer>19 then
  109.         projectiles[id].timer=0
  110.         projectiles[id].frame=1-projectiles[id].frame
  111.         if projectiles[id].frame==1 then
  112.             -- Yell "Heil!"
  113.             playsound(cc.hitler.sfx_attack)
  114.             -- Punch Players
  115.             if collision(col20x20,projectiles[id].x+projectiles[id].dir*11,projectiles[id].y-5,0,1,0)==1 then
  116.                 if playercollision()~=0 and playercollision()~=projectiles[id].ignore then
  117.                     playerpush(playercollision(),projectiles[id].dir*3,-10)
  118.                     playerdamage(playercollision(),10)
  119.                     playsound(sfx_splatter1)
  120.                     particle(p_ring,getplayerx(playercollision()),getplayery(playercollision()))
  121.                     particlecolor(255,0,0)
  122.                     blood(getplayerx(playercollision()),getplayery(playercollision()))
  123.                 end
  124.             end
  125.         end
  126.     end
  127.     -- Move Left/Right
  128.     projectiles[id].x=projectiles[id].x+projectiles[id].dir*0.5
  129.     if collision(colplayer,projectiles[id].x,projectiles[id].y)==1 then
  130.         if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  131.             -- Upwards/Downwards space?
  132.             doturn=1
  133.             for i=1,6,1 do
  134.                 if (i%2)==1 then offset=(i+1)/2 else offset=-(i/2) end
  135.                 if collision(colplayer,projectiles[id].x,projectiles[id].y+offset)==0 then
  136.                     doturn=0; projectiles[id].ignore=0 projectiles[id].y=projectiles[id].y+offset; break
  137.                 elseif terraincollision()==0 and objectcollision()==0 and playercollision()==projectiles[id].ignore then
  138.                     doturn=0; projectiles[id].y=projectiles[id].y+offset; break
  139.                 end
  140.             end
  141.             if doturn==1 then
  142.                 -- Move Back / Turn
  143.                 projectiles[id].x=projectiles[id].x-projectiles[id].dir*0.5
  144.                 if terraincollision()==1 or objectcollision()>0 then projectiles[id].dir=projectiles[id].dir*(-1) end
  145.             end
  146.         end
  147.     else
  148.         projectiles[id].ignore=0
  149.     end
  150.     -- Fall Down
  151.     projectiles[id].sy=projectiles[id].sy+getgravity()
  152.     msubt=math.ceil(math.abs(projectiles[id].sy)/3)
  153.     msuby=projectiles[id].sy/msubt
  154.     for i=1,msubt,1 do
  155.         projectiles[id].y=projectiles[id].y+msuby
  156.         -- Collision
  157.         if collision(colplayer,projectiles[id].x,projectiles[id].y)==1 then
  158.             if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  159.                 projectiles[id].sy=0
  160.                 projectiles[id].y=projectiles[id].y-msuby
  161.                 break
  162.             end
  163.         else
  164.             projectiles[id].ignore=0
  165.         end
  166.         -- Water
  167.         if (projectiles[id].y)>getwatery()-30 then
  168.             -- Effects
  169.             particle(p_waterhit,projectiles[id].x,projectiles[id].y)
  170.             playsound(sfx_hitwater3)
  171.             -- Free projectile
  172.             freeprojectile(id)
  173.             -- End Turn
  174.             endturn()
  175.             return
  176.         end
  177.     end
  178.     -- Timer / Explode
  179.     if getframesleft()<5 or (weapon_timer<=0 and keydown(key_attack)==1) then
  180.         -- Splatter
  181.         playsound(sfx_splatter2)
  182.         -- Cause damage
  183.         arealdamage(projectiles[id].x,projectiles[id].y,125,65)
  184.         -- Destroy terrain
  185.         terrainexplosion(projectiles[id].x,projectiles[id].y,55,1)
  186.         -- Crater
  187.         grey=math.random(0,40)
  188.         if math.random(0,1)==1 then
  189.             terrainalphaimage(gfx_crater150,projectiles[id].x,projectiles[id].y,math.random(6,9)*0.1,grey,grey,grey)
  190.         else
  191.             terrainalphaimage(gfx_crater175,projectiles[id].x,projectiles[id].y,math.random(6,9)*0.1,grey,grey,grey)
  192.         end
  193.         -- Free projectile
  194.         freeprojectile(id)
  195.         -- End Turn
  196.         endturn()
  197.     end
  198.     -- Scroll to projectile
  199.     scroll(projectiles[id].x,projectiles[id].y)
  200. end